﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Data;

namespace Example
{

    /// <summary>
    /// Clase que se encarga de hacer la lógica de negocio de un Registro/Además del elemento Usuario como tal
    /// </summary>
    class Usuario
    {
        private String nombre;
        private String password;
        private int id;
        private Byte[] avatar;
        private String email;
        private String descripcion;
        private int ranking;
        private UsuarioDAO usuarioDAO;

        /// <summary>
        /// Constructor vacio de la clase Usuario
        /// </summary>
        public Usuario()
        {
        }

        /// <summary>
        /// Constructor con los parámetros que se van a usar en UsuarioDAO
        /// </summary>
        /// <param name="avatar">Avatar del usuario</param>
        /// <param name="descripcion">Descripción del usuario</param>
        /// <param name="email">Email del usuario</param>
        /// <param name="nombre">Nombre del usuario</param>
        /// <param name="password">Password del usuario</param>
        public Usuario(String nombre, String password, Byte[] avatar, String email, String descripcion)
        {
            this.nombre = nombre;
            this.password = password;
            this.avatar = avatar;
            this.email = email;
            this.descripcion = descripcion;
            usuarioDAO = new UsuarioDAO();
        }

        /// <summary>
        /// Constructor de usuario a partir de su nombre
        /// </summary>
        public Usuario(String nombre)
        {
            this.nombre = nombre;
            usuarioDAO = new UsuarioDAO();
            /*Obtenemos el resto de atributos de la base de datos*/
            DataRow myRow;
            myRow = usuarioDAO.obtener_atributos(nombre);
            if (myRow["avatar"] == System.DBNull.Value)
            {
                this.avatar = null;
            }
            else
            {
                this.avatar = (byte[])myRow["avatar"];
            }
            this.password = (String)myRow["password"];
            this.email = (String)myRow["email"];
            this.descripcion = (String)myRow["descripcion"];
            this.ranking = (int)myRow["puntos"];
            
        }

        public String getNombre()
        {
            return this.nombre;
        }

        public String getPassword()
        {
            return this.password;
        }

        public byte[] getAvatar()
        {
            return this.avatar;
        }

        public String getEmail()
        {
            return this.email;
        }

        public String getDescripcion()
        {
            return this.descripcion;
        }

        public void setEmail(String newEmail)
        {
            this.email = newEmail;
        }

        public void setDescripcion(String newDescripcion)
        {
            this.descripcion = newDescripcion;
        }

        public void setNombre(String newNombre)
        {
            this.nombre = newNombre;
        }

        public void setPassword(String newPassword)
        {
            this.password = newPassword;
        }

        public void setAvatar(Byte[] newAvatar)
        {
            this.avatar = newAvatar;
        }

        public int getId()
        {
            return this.id;
        }

        public void setId(int id)
        {
            this.id = id;
        }

        public int getRanking()
        {
            return this.ranking;
        }

        public void setRanking(int newRanking)
        {
            this.ranking = newRanking;
        }

        /// <summary>
        /// Método que realiza el registro, invocando al método de la clase DAO correspondiente
        /// </summary>
        public Boolean registro()
        {
            return usuarioDAO.registro(this.nombre, this.password, this.avatar, this.email, this.descripcion);
            
        }

    }
}
